Tessellation is a technique used in computer graphics to divide up a set of surfaces representing objects in a scene into a number of smaller and simpler pieces, (referred to as primitives), typically triangles, which are more amenable to rendering. The resulting tessellated surface is generally an approximation to the original surface, but the accuracy of this approximation can be improved by increasing the number of generated primitives, which in turn usually results in the primitives being smaller. The amount of tessellation/sub-division is usually determined by a level of detail (LOD). An increased number of primitives is therefore typically used where a higher level of detail is required, e.g. because an object is closer to the viewer and/or the object has a more intricate shape. However, use of larger numbers of triangles increases the processing effort required to render the scene and hence increases the size of the hardware that performs the processing. Furthermore, as the average triangle size reduces, aliasing (e.g. when angled lines appear jagged) occurs more often and hence graphics processing systems employ anti-aliasing techniques which often involve taking several samples per pixel and subsequently filtering the data.
As the number of primitives that are generated increases, the ability of a graphics processing system to process the primitives becomes more important. One known way of improving the efficiency of a graphics processing system is to render an image in a tile-based manner. In this way, the rendering space into which primitives are to be rendered is divided into a plurality of tiles, which can then be rendered independently from each other. A tile-based graphics system includes a tiling unit to tile the primitives, i.e. to determine, for a primitive, which of the tiles of a rendering space the primitive is in. Then, when a rendering unit renders the tile, it can be given information (e.g. a per-tile list) indicating which primitives should be used to render the tile.
An alternative to tile-based rendering is immediate-mode rendering. In such systems there is no tiling unit generating per-tile lists and each primitive appears to be rendered immediately; however, even in such systems, the rendering space may still be divided into tiles of pixels and rendering of each primitive may still be done on a tile by tile basis with each pixel in a tile being processed before progressing to the next tile. This is done to improve locality of memory references.
The embodiments described below are provided by way of example only and are not limiting of implementations which solve any or all of the disadvantages of known graphics processing pipelines.